﻿#pragma once
#ifndef UnitServer_hpp
#define UnitServer_hpp

#include<memory>
#include<string>
#include"../Base/Network/Server.hpp"
#include"SessionMgr.hpp"
#include"../Base/Tools/ObjectPool.hpp"

namespace MMFNetwork
{
    //前置声明
    class BinaryDispatch;
}

namespace SC_SUN
{

    //管理链接进来的单元
    /**
     * 接收单元的链接
     * 管理单元额session
     * 处理消息
     */
    class Service
    {

        std::shared_ptr<MMFNetwork::Server> mServer;                //服务器对象
        SessionMgr& mSessions;                                      //管理的session
        std::shared_ptr<MMFNetwork::BinaryDispatch> mDispatcher;    //消息派发器
        std::string mIp;                                            //ip地址
        uint16_t mPort;                                             //端口号
        MMF::ObjectPool<std::vector<char>> mSerialInPool;

    public:

        Service(
            SessionMgr& sessionMgr,
            const std::string& ip, 
            uint16_t port
        );

        ~Service();

        bool Start();
        void Stop();

        std::shared_ptr<MMFNetwork::BinaryDispatch> Dispatcher();
        std::vector<char>& GetSerialInBuffer() {return mSerialInPool.GetObject();}
    };

}

#endif